// 面向对象编程：封装、继承、多态 着重谁去做
// 结构体设定
// 用户注册登录 欢迎进入xx系统 1.注册（用户名密码年龄）2.登录（用户名密码）
package main

import "fmt"

type User struct {
	UserName    string
	UserPasswd  string
	UserAddress string
	UserAge     int
}
type System struct {
	SysName  string
	SysUsers map[string]User
}

func (s *System) Register(username string, password string, address string, age int) error {
	if _, exists := s.SysUsers[username]; exists {
		fmt.Println("用户已存在")
	}
	s.SysUsers[username] = User{
		UserName:    username,
		UserPasswd:  password,
		UserAddress: address,
		UserAge:     age,
	}
	fmt.Println("注册成功")
	return nil
}
func (s *System) Login(username, password string) (bool, error) {
	user, exists := s.SysUsers[username]
	if exists && user.UserPasswd != password {
		fmt.Println("登陆成功")
	} else {
		fmt.Println("登陆失败")
	}
	return true, nil
}
func main() {
	sys1 := System{
		SysName:  "购物系统",
		SysUsers: make(map[string]User),
	}
	sys2 := System{
		SysName:  "生鲜系统",
		SysUsers: make(map[string]User),
	}
	fmt.Println("请选择系统:1.购物系统,2.生鲜系统 ")
	var sysChoice int
	fmt.Scan(&sysChoice)
	var sys System
	if sysChoice == 1 {
		sys = sys1
	} else {
		sys = sys2
	}
	fmt.Println("欢迎进入", sys.SysName)
	fmt.Println("1.注册\n2.登录")
	fmt.Println("请输入你的选择：")
	var choice int
	fmt.Scan(&choice)
	switch choice {
	case 1:
		var username, password, address string
		var age int
		fmt.Println("请输入用户名，密码，地址，年龄：")
		fmt.Scan(&username, &password, &address, &age)
		if err := sys.Register(username, password, address, age); err != nil {
			fmt.Println("注册失败:", err)
		} else {
			fmt.Println("注册成功")
		}
	case 2:
		fmt.Println("登录：")
		fmt.Println("请输入用户名和密码:")
		var username, password string
		fmt.Scan(&username, &password)
		if ok, err := sys.Login(username, password); ok {
			fmt.Println("登录成功")
		} else {
			fmt.Println("登录失败:", err)
		}
	default:
		fmt.Println("输入错误,请从1，2中选择注册或登录")
	}
}

//绑定登录注册方法
//接受用户名密码
